package br.com.siscom.model.helper;

import java.util.HashMap;

import javax.servlet.http.HttpServletRequest;

import br.com.siscom.conexao.InterfacePool;
import br.com.siscom.conexao.Pool;
import br.com.siscom.model.bean.EditarAcesso;
import br.com.siscom.model.command.AtualizarAcesso;
import br.com.siscom.model.command.AtualizarCliente;
import br.com.siscom.model.command.AtualizarFuncionario;
import br.com.siscom.model.command.CadastrarCliente;
import br.com.siscom.model.command.CadastrarFuncionario;
import br.com.siscom.model.command.ConsultarCliente;
import br.com.siscom.model.command.ConsultarFuncionario;
import br.com.siscom.model.command.EditarCliente;
import br.com.siscom.model.command.EditarFuncionario;
import br.com.siscom.model.command.ExcluirCliente;
import br.com.siscom.model.command.ExcluirFuncionario;
import br.com.siscom.model.command.IniciarSiscom;
import br.com.siscom.model.command.InterfaceCommand;
import br.com.siscom.model.command.AcessarUsuario;
import br.com.siscom.model.dao.AcessoDAO;
import br.com.siscom.model.dao.ClienteDAO;
import br.com.siscom.model.dao.DepartamentoDAO;
import br.com.siscom.model.dao.FuncionarioDAO;

public class SiscomHelper 
{
	private HashMap<String, InterfaceCommand> mapaComandos;
	private HttpServletRequest request;
	private InterfacePool pool;
	
	public SiscomHelper(InterfacePool pool)
	{
		this.pool = pool;
	
		mapaComandos = new HashMap<String, InterfaceCommand>();
		mapaComandos.put("cadastrarCliente", new CadastrarCliente(new ClienteDAO(pool)));
		mapaComandos.put("consultarCliente", new ConsultarCliente(new ClienteDAO(pool)));
		mapaComandos.put("atualizarCliente", new AtualizarCliente(new ClienteDAO(pool)));
		mapaComandos.put("editarCliente", new EditarCliente(new ClienteDAO(pool)));
		mapaComandos.put("excluirCliente", new ExcluirCliente(new ClienteDAO(pool)));
		
		mapaComandos.put("cadastrarFuncionario", new CadastrarFuncionario(new FuncionarioDAO(pool)));
		mapaComandos.put("editarFuncionario", new EditarFuncionario(new FuncionarioDAO(pool), new DepartamentoDAO(pool)));
		mapaComandos.put("consultarFuncionario", new ConsultarFuncionario(new FuncionarioDAO(pool)));
		mapaComandos.put("excluirFuncionario", new ExcluirFuncionario(new FuncionarioDAO(pool)));
		mapaComandos.put("atualizarFuncionario", new AtualizarFuncionario(new FuncionarioDAO(pool)));

		mapaComandos.put("atualizarAcesso", new AtualizarAcesso(new AcessoDAO(pool)));
		mapaComandos.put("editarAcesso", new EditarAcesso(new FuncionarioDAO(pool), new AcessoDAO(pool)));
		
		mapaComandos.put("acessarUsuario", new AcessarUsuario(new FuncionarioDAO(pool)));
		mapaComandos.put("iniciarSiscom", new IniciarSiscom());
	}
	
	public InterfaceCommand getCommand()
	{
		String cmd = request.getParameter("cmd");
		if(cmd == null || request.getSession().getAttribute("usuario") == null)
			return mapaComandos.get("acessarUsuario");
		return mapaComandos.get(cmd);
	}

	public void setRequest(HttpServletRequest request) {
		this.request = request;
	}
}
